// msi/MSI10.js
// MSI-10 条码编码器（Modified Plessey + Mod 10 校验）
// 在原始数据后添加一个 Mod 10（Luhn）校验位

import MSI from './MSI.js';
import { mod10 } from './checksums.js';

/**
 * MSI-10 条码类（基于 MSI，添加 Mod 10 校验位）
 *
 * 规则：
 * - 基于 MSI 编码规则
 * - 自动计算并附加 Mod 10 校验位（Luhn 算法）
 * - 输入应为纯数字字符串
 *
 * 示例：
 *   输入: '12345'
 *   计算 Mod 10: mod10('12345') = 4
 *   实际编码数据: '123454'
 */
class MSI10 extends MSI {
  /**
   * 构造函数
   * @param {string} data - 原始数字字符串（不含校验位）
   * @param {Object} options - 条码配置项
   */
  constructor(data, options) {
    const checksum = mod10(data);
    super(data + checksum, options);
  }

  /**
   * 验证方法继承自 MSI（只需验证原始输入为数字）
   * 子类可重写以包含校验逻辑
   * @returns {boolean}
   */
  valid() {
    return /^[0-9]+$/.test(this.data); // 注意：this.data 是原始输入（未加校验位）
  }
}

export default MSI10;